﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RN
{
    /*Clase que se encarga de crear el servidor
     */
    public class MailServer
    {
        private List<Message> listamensajes = new List<Message>();
        private String nombreservidor;

        /*Constructor del servidor se le pasa el nombre del servidor
        */
        public MailServer(String nombre)
        {
            nombreservidor = nombre;
        }

        /*Constructor del servidor metodo de sobrecarga vacio
        */
        public MailServer()
        {

        }

        /*Devuelve el nombre del servidor
        */
        public String Nombreservidor()
        {
            return nombreservidor;
        }

        /*Metodo que devuelve cuantos mensajes estan sin leer en el servidor de acuerdo al usuario que se le pasa
        */
        public int getMessagesWaiting(String usuario)
        {
            int contador = 0;
            foreach (Message mensaje in listamensajes)
            {
                contador += ContadordeMensajes(usuario, mensaje);
            }
            return contador;
        }

        /*Metodo auxiliar que devuelve cuantos mensajes estan sin leer en el servidor de acuerdo al usuario que se le pasa
        */
        private int ContadordeMensajes(String usuario, Message mensaje)
        {
            int contador = 0;
            String to = mensaje.To;
            if (to.Equals(usuario))
            {
                contador++;
            }
            return contador;
        }

        /*Metodo que devuelve los mensajes para ser leido de acuerdo al usuario que se le pasa
        */
        public Message getNextMessage(String usuario)
        {
            foreach (Message mensaje in listamensajes)
            {
                ProximoMensaje(usuario, mensaje);
                return mensaje;
            }
            return null;
        }

        /*Metodo auxiliar que devuelve los mensajes para ser leido de acuerdo al usuario que se le pasa
        */
        private Message ProximoMensaje(String usuario, Message mensaje)
        {
            String to = mensaje.To;
            if (to.Equals(usuario))
            {
                listamensajes.Remove(mensaje);
                return mensaje;
            }
            return null;
        }

        /*Metodo que agrega el mensaje enviado a la lista de mensajes
        */
        public void post(Message item)
        {
            listamensajes.Add(item);
        }
    }
}
